Computers interact with a wide variety of other computers through Local Area Networks (LANs), Wide Area Networks (WANs), dial-up connections, and the like. With the wide-spread growth of the Internet, connectivity between computers has become more important and has opened up many new applications and technologies. The growth of large-scale networks, and the wide-spread availability of low-cost personal computers, has fundamentally changed the way that many people work, interact, communicate, and play.
An increasingly important form of networking may generally be referred to as remote presentation, which can use protocols such as Remote Desktop Protocol (RDP), Independent Computing Architecture (ICA), and others similar protocols to share a desktop and other applications with a remote client. Such computing systems typically transmit the keyboard presses and mouse clicks or selections from the client to a server and relay the screen updates back in the other direction over a network connection (e.g., the Internet). As such, the user experience is a local computing environment with centralized server control over the processing and applications.
Some systems that serve remote presentation sessions do so through the use of one or more services (such as a process that runs regardless of whether a user session is active). Such a service may receive image data from a client or user session on the system that is serving a remote presentation session to a client, encode it and transmit it to the client via a remote presentation session protocol.
Difficulties arise where this remote presentation session service executes in a “session” (each user logged into the operating system is given a separate session, or memory and execution space, in which to execute his processes) that does not have access to system resources that the service needs to effectuate its purpose. Some operating systems, like MICROSOFT WINDOWS 7, separate the services of the operating system into their own session (in the MICROSOFT WINDOWS 7 operating system, this session is known as “session 0,” and herein such a session that contains services separated into its own session will be referred to as such). Session 0 is frequently isolated and is subject to security constraints—for instance, session 0 may not be able to access a graphics processing unit (GPU) of the computer on which it executes. Lack of access to a GPU prevents a service from leveraging the power of the GPU to perform complex graphics operations, like compression and rendering.
Furthermore, there may be a problem with using a standard user session to enable session 0 to utilize the GPU. For instance, a standard user session is an interactive session, where the user may be logged off, and if that user initiates log off, all processes in that session will terminate, including any processes used to enable session 0 to utilize the GPU. Furthermore, even if these processes used to enable session 0 to utilize the GPU are recreated when they terminate, there is still the issue of time lost to this recreation process, which negatively impacts user experience.
Thus, this isolation of session 0 poses a problem for services that attempt to utilize the GPU, such as a remote presentation session service that attempts to utilize the GPU to compress an image rapidly, or while minimizing CPU resources consumed in performing this compression.